package pildemil

import javax.mail.Message
import javax.mail.Session
import javax.mail.Transport
import javax.mail.internet.InternetAddress
import javax.mail.internet.MimeMessage

import com.google.appengine.api.datastore.*


class TransactionController {
	
	def persistenceManager
	def transactionService
	def mailService
	
	static allowedMethods = []
	
	def index = {
		redirect(action:'liste')
	}
	
    def liste = {		
		def projetKey = KeyFactory.stringToKey(session.projetKey)
		Projet projet = persistenceManager.getObjectById(Projet.class, projetKey)
		
		def transaction = persistenceManager.currentTransaction()
		
		transactionService.calculMaj(projet)
		transactionService.calculTransactions(projet)

		try {
			transaction.begin()			
			persistenceManager.makePersistent(projet)
			transaction.commit()
		} catch(Exception e) {
			if (transaction.isActive()) { transaction.rollback(); }
		}
		
		def listeTransaction = getTransactions(projet)
		render(view:"liste", model:["listeTransaction":listeTransaction])
	}
	
	def envoyer = {
		def projetKey = KeyFactory.stringToKey(session.projetKey)
		Projet projet = persistenceManager.getObjectById(Projet.class, projetKey)
	    Participant responsable = persistenceManager.getObjectById(Participant.class, projet.responsable)
		
		def message = "Mail envoyé!"
		if (responsable.email == "") {
			message = "Le mail du responsable est requis pour envoyer un e-mail récapitulatif"
		} else {
			mailService.envoyerMail(projet, responsable)
		}
		
		def listeTransaction = getTransactions(projet)
		render(view:"liste", model:["projet":projet, "listeTransaction":listeTransaction, "message":message])
	}
	
	/* FONCTIONS DE RECUPERATION */
	
	def getTransactions(Projet projet) {
		def transactionsVal = projet.transactions
		transactionsVal.each {
			Participant donneur = persistenceManager.getObjectById(Participant.class, it.donneur)
			Participant receveur = persistenceManager.getObjectById(Participant.class, it.receveur)
			it.nomDonneur = donneur.nom
			it.nomReceveur = receveur.nom
		}
	}
}
